<?php

/*
	Question2Answer (c) Gideon Greenspan

	http://www.question2answer.org/

	
	File: qa-include/qa-db-metas.php
	Version: See define()s at top of qa-include/qa-base.php
	Description: Database-level access to metas tables


	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU General Public License
	as published by the Free Software Foundation; either version 2
	of the License, or (at your option) any later version.
	
	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	More about this license: http://www.question2answer.org/license.php
*/

if (!defined('QA_VERSION')) { // don't allow this page to be requested directly from browser
    header('Location: ../');
    exit;
}


function qa_db_usermeta_set($userid, $key, $value)
    /*
        Set the metadata for user $userid with $key to $value. Keys beginning qa_ are reserved for the Q2A core.
    */
{
    qa_db_meta_set('usermetas', 'userid', $userid, $key, $value);
}


function qa_db_usermeta_clear($userid, $key)
    /*
        Clear the metadata for user $userid with $key ($key can also be an array of keys)
    */
{
    qa_db_meta_clear('usermetas', 'userid', $userid, $key);
}


function qa_db_usermeta_get($userid, $key)
    /*
        Return the metadata value for user $userid with $key ($key can also be an array of keys in which case this
        returns an array of metadata key => value).
    */
{
    return qa_db_meta_get('usermetas', 'userid', $userid, $key);
}


function qa_db_postmeta_set($postid, $key, $value)
    /*
        Set the metadata for post $postid with $key to $value. Keys beginning qa_ are reserved for the Q2A core.
    */
{
    qa_db_meta_set('postmetas', 'postid', $postid, $key, $value);
}


function qa_db_postmeta_clear($postid, $key)
    /*
        Clear the metadata for post $postid with $key ($key can also be an array of keys)
    */
{
    qa_db_meta_clear('postmetas', 'postid', $postid, $key);
}


function qa_db_postmeta_get($postid, $key)
    /*
        Return the metadata value for post $postid with $key ($key can also be an array of keys in which case this
        returns an array of metadata key => value).
    */
{
    return qa_db_meta_get('postmetas', 'postid', $postid, $key);
}


function qa_db_categorymeta_set($categoryid, $key, $value)
    /*
        Set the metadata for category $categoryid with $key to $value. Keys beginning qa_ are reserved for the Q2A core.
    */
{
    qa_db_meta_set('categorymetas', 'categoryid', $categoryid, $key, $value);
}


function qa_db_categorymeta_clear($categoryid, $key)
    /*
        Clear the metadata for category $categoryid with $key ($key can also be an array of keys)
    */
{
    qa_db_meta_clear('categorymetas', 'categoryid', $categoryid, $key);
}


function qa_db_categorymeta_get($categoryid, $key)
    /*
        Return the metadata value for category $categoryid with $key ($key can also be an array of keys in which
        case this returns an array of metadata key => value).
    */
{
    return qa_db_meta_get('categorymetas', 'categoryid', $categoryid, $key);
}


function qa_db_tagmeta_set($tag, $key, $value)
    /*
        Set the metadata for tag $tag with $key to $value. Keys beginning qa_ are reserved for the Q2A core.
    */
{
    qa_db_meta_set('tagmetas', 'tag', $tag, $key, $value);
}


function qa_db_tagmeta_clear($tag, $key)
    /*
        Clear the metadata for tag $tag with $key ($key can also be an array of keys)
    */
{
    qa_db_meta_clear('tagmetas', 'tag', $tag, $key);
}


function qa_db_tagmeta_get($tag, $key)
    /*
        Return the metadata value for tag $tag with $key ($key can also be an array of keys in which case this
        returns an array of metadata key => value).
    */
{
    return qa_db_meta_get('tagmetas', 'tag', $tag, $key);
}


function qa_db_meta_set($metatable, $idcolumn, $idvalue, $title, $content)
    /*
        Internal general function to set metadata
    */
{
    qa_db_query_sub(
        'REPLACE ^' . $metatable . ' (' . $idcolumn . ', title, content) VALUES ($, $, $)',
        $idvalue, $title, $content
    );
}


function qa_db_meta_clear($metatable, $idcolumn, $idvalue, $title)
    /*
        Internal general function to clear metadata
    */
{
    if (is_array($title)) {
        if (count($title))
            qa_db_query_sub(
                'DELETE FROM ^' . $metatable . ' WHERE ' . $idcolumn . '=$ AND title IN ($)',
                $idvalue, $title
            );

    } else
        qa_db_query_sub(
            'DELETE FROM ^' . $metatable . ' WHERE ' . $idcolumn . '=$ AND title=$',
            $idvalue, $title
        );
}


function qa_db_meta_get($metatable, $idcolumn, $idvalue, $title)
    /*
        Internal general function to return metadata
    */
{
    if (is_array($title)) {
        if (count($title))
            return qa_db_read_all_assoc(qa_db_query_sub(
                'SELECT title, content FROM ^' . $metatable . ' WHERE ' . $idcolumn . '=$ AND title IN($)',
                $idvalue, $title
            ), 'title', 'content');
        else
            return array();

    } else
        return qa_db_read_one_value(qa_db_query_sub(
            'SELECT content FROM ^' . $metatable . ' WHERE ' . $idcolumn . '=$ AND title=$',
            $idvalue, $title
        ), true);
}


/*
	Omit PHP closing tag to help avoid accidental output
*/